《Qt入门 (十) 您所在的位置:网站首页 qt tablewidget刷新数据卡顿 《Qt入门 (十)

《Qt入门 (十)

2024-04-09 08:01| 来源: 网络整理| 查看: 265

QTableview 多线程操作model问题记录 背景一、在主线程中设置QStandardItemModel二、在子线程操作model、主线程显示

背景

在使用Qtableview 读写数据库时,因为操作数据文件在子线程操作,但是显示却在主线程,又想实现实时刷新数据的显示效果,这中间遇到几个问题记录一下。

一、在主线程中设置QStandardItemModel m_model = new QStandardItemModel(); m_model->setHorizontalHeaderItem(KEY_NAME,new QStandardItem("按键名")); m_model->setHorizontalHeaderItem(KEY_DATA,new QStandardItem("值")); m_model->setHorizontalHeaderItem(ASIXID,new QStandardItem("轴号")); m_model->setHorizontalHeaderItem(ASIXData,new QStandardItem("轴值")); //设置表格属性 ui->tabviewShowBtn->setModel(m_model);

在主线程里操作model,就可以达到QTableView立马变更视图的操作, 每次变更数据只需要变更model 的数据即可

二、在子线程操作model、主线程显示

同样在初始化界面时 定义个全局的model 获取这个model绑定到tableview上

m_model = &CSingleton::getInstance()->m_tablemodel; ui->tableView->setModel(m_model);

在子线程里实时刷新model的数据

/******************************************************************* ** 函数名: on_threadInit ** 函数描述: 线程初始化 ** 参数: Name:进程名字 ** 返回:QString ********************************************************************/ void CtlP3DSimConnet:: on_threadInit(void) { m_sqlite = new Sqlite("1111.s3db"); m_sqltabmdl = &CSingleton::getInstance()->m_tablemodel; QString filter = "isread = 'Y'"; m_sqlite->find2StandMdl("P3DSimConnect", filter,m_sqltabmdl); } //子线程一个定时器定时刷新model的值 QStandardItemModel* model = m_sqltabmdl; for (int i = 0; i rowCount(); i++){ ::memcpy(&data, pMemry, 4);//内存拷贝对应的指针长度 model->setData(model->index(i, 4), data); pMemry++; }

使用时发现出现以下报错,排查了好久,发现信号连接什么的都没什么问题。 后面才发现,原来Qt的model 会发出一个datachange 的信号

如果都在主线程操作这个信号没什么问题 挪动到子线程,就会出现下面的警告

这时候就需要手动注册以下对应的参数

qRegisterMetaTypeQt::Orientation(“Qt::Orientation”);//QSqlTableModel qRegisterMetaType(“QVector”);//QStandardItemModel

(Make sure 'QVector' is registered using qRegisterMetaType().) QObject::connect: Cannot queue arguments of type 'QVector'

出现警告会导致 QTableview 刷新时会一卡一卡的,虽然你已经定义了全局的model,datachange的信号连接时并没有找到对应的参数信号连接就有问题。 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有